package com.lfb.collection;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class FanXingTestDriver {
    public static void main(String[] args) {

    }

    /**
     * 使用泛型
     * Map接口实现类：HashMap
     */
    private static void test01() {
        // 创建一个List集合对象
        // 多态：父类指代子类
        // 面向接口编程思想
        Map<String, Object> map0 = new HashMap<>();
        // 添加元素
        map0.put("zhangsan", "男");
        map0.put("lisi", "女");
        map0.put("lisi", "男");
        //map0.put(2, "女");
        map0.put("wangwu", "男");

        // 遍历
        System.out.println("zhangsan:" + map0.get("zhangsan"));

        System.out.println("将Map集合转换为EntrySet集合进行遍历(增强型的for循环)：");
        // 从map中获取所有的键值对集合（Set结构）
        Set<Map.Entry<String, Object>> entrySet = map0.entrySet();
        // 此时，map的遍历转换为对EntrySet的遍历（Set集合的遍历形式）
        for (Map.Entry entry : entrySet) {
            // 强制类型转换（向下溯型）
            //Map.Entry entry = (Map.Entry)en;
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println("将Map集合转换为EntrySet集合进行遍历(迭代器)：");
        // 获取entrySet的迭代器对象
        Iterator<Map.Entry<String, Object>> it = entrySet.iterator();
        while (it.hasNext()) {
            // 强制类型转换（向下溯型）
            Map.Entry entry = it.next();
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println("将Map集合转换为keySet集合进行遍历(迭代器)：");
        // 将map转为keySet集合进行遍历：
        // 通过遍历map中取出的key集合，然后使用get(key)方法获取与之对应的value值，达到遍历目的
        // 获取Map的keySet集合对象
        Set<String> setKeys = map0.keySet();
        // 转换为对keySet的遍历
        // 获取entrySet的迭代器对象
        Iterator<String> it1 = setKeys.iterator();
        while (it1.hasNext()) {
            // 获取当前遍历的对象（key）
            String key = it1.next();
            // 通过key从map中取出与key对应的value值
            System.out.println(key + ":" + map0.get(key));
        }
    }
}
